View Javadoc
1 /* Copyright © 1999 George Reese, All Rights Reserved */ 2 package net.plugin.sql.gui.model.table; 3 4 import net.plugin.sql.beans.DataSource; 5 import net.plugin.sql.util.JDBCConnectionManager; 6 import net.plugin.sql.util.DataSourceException; 7 8 import javax.swing.table.AbstractTableModel; 9 import javax.swing.*; 10 import java.sql.*; 11 import javax.sql.RowSet; 12 import javax.sql.RowSetEvent; 13 import javax.sql.RowSetListener; 14 15 import sun.jdbc.rowset.CachedRowSet; 16 17 public class CachedRowSetTableModel extends AbstractTableModel implements RowSetListener { 18 private RowSet rowSet = null; 19 20 public CachedRowSetTableModel(RowSet set) { 21 super(); 22 rowSet = set; 23 rowSet.addRowSetListener(this); 24 } 25 26 public void cursorMoved(RowSetEvent event) { 27 } 28 29 public Class getColumnClass(int column) { 30 String cname; 31 int type; 32 33 try { 34 ResultSetMetaData meta = rowSet.getMetaData(); 35 36 if (meta == null) { 37 return null; 38 } 39 type = meta.getColumnType(column + 1); 40 } catch (SQLException e) { 41 e.printStackTrace(); 42 return super.getColumnClass(column); 43 } 44 switch (type) { 45 case Types.BIT: 46 { 47 cname = "java.lang.Boolean"; 48 break; 49 } 50 case Types.TINYINT: 51 { 52 cname = "java.lang.Byte"; 53 break; 54 } 55 case Types.SMALLINT: 56 { 57 cname = "java.lang.Short"; 58 break; 59 } 60 case Types.INTEGER: 61 { 62 cname = "java.lang.Integer"; 63 break; 64 } 65 case Types.BIGINT: 66 { 67 cname = "java.lang.Long"; 68 break; 69 } 70 case Types.FLOAT: 71 case Types.REAL: 72 { 73 cname = "java.lang.Float"; 74 break; 75 } 76 case Types.DOUBLE: 77 { 78 cname = "java.lang.Double"; 79 break; 80 } 81 case Types.NUMERIC: 82 { 83 cname = "java.lang.Number"; 84 break; 85 } 86 case Types.DECIMAL: 87 { 88 cname = "java.math.BigDecimal"; 89 break; 90 } 91 case Types.CHAR: 92 case Types.VARCHAR: 93 case Types.LONGVARCHAR: 94 { 95 cname = "java.lang.String"; 96 break; 97 } 98 case Types.DATE: 99 { 100 cname = "java.sql.Date"; 101 break; 102 } 103 case Types.TIME: 104 { 105 cname = "java.sql.Time"; 106 break; 107 } 108 case Types.TIMESTAMP: 109 { 110 cname = "java.sql.Timestamp"; 111 break; 112 } 113 case Types.BINARY: 114 case Types.VARBINARY: 115 case Types.LONGVARBINARY: 116 { 117 cname = "byte[]"; 118 break; 119 } 120 case Types.OTHER: 121 case Types.JAVA_OBJECT: 122 { 123 cname = "java.lang.Object"; 124 break; 125 } 126 case Types.CLOB: 127 { 128 cname = "java.sql.Clob"; 129 break; 130 } 131 case Types.BLOB: 132 { 133 cname = "java.ssql.Blob"; 134 break; 135 } 136 case Types.REF: 137 { 138 cname = "java.sql.Ref"; 139 break; 140 } 141 case Types.STRUCT: 142 { 143 cname = "java.sql.Struct"; 144 break; 145 } 146 default: 147 { 148 return super.getColumnClass(column); 149 } 150 } 151 try { 152 return Class.forName(cname); 153 } catch (Exception e) { 154 e.printStackTrace(); 155 return super.getColumnClass(column); 156 } 157 } 158 159 public int getColumnCount() { 160 try { 161 ResultSetMetaData meta = rowSet.getMetaData(); 162 163 if (meta == null) { 164 return 0; 165 } 166 return meta.getColumnCount(); 167 } catch (SQLException e) { 168 return 0; 169 } 170 } 171 172 public String getColumnName(int col) { 173 try { 174 ResultSetMetaData meta = rowSet.getMetaData(); 175 176 if (meta == null) { 177 return null; 178 } 179 return meta.getColumnName(col + 1); 180 } catch (SQLException e) { 181 return "Error"; 182 } 183 } 184 185 public int getRowCount() { 186 try { 187 if (rowSet.last()) { 188 return (rowSet.getRow()); 189 } else { 190 return 0; 191 } 192 } catch (SQLException e) { 193 return 0; 194 } 195 } 196 197 public Object getValueAt(int row, int col) { 198 try { 199 if (!rowSet.absolute(row + 1)) { 200 return null; 201 } 202 return rowSet.getObject(col + 1); 203 } catch (SQLException e) { 204 return null; 205 } 206 } 207 208 public void rowChanged(RowSetEvent event) { 209 try { 210 int row = rowSet.getRow(); 211 212 if (rowSet.rowDeleted()) { 213 fireTableRowsDeleted(row, row); 214 } else if (rowSet.rowInserted()) { 215 fireTableRowsInserted(row, row); 216 } else if (rowSet.rowUpdated()) { 217 fireTableRowsUpdated(row, row); 218 } 219 } catch (SQLException e) { 220 } 221 } 222 223 public void rowSetChanged(RowSetEvent event) { 224 fireTableStructureChanged(); 225 } 226 227 public void setValueAt(Object value, int row, int column) { 228 try { 229 if (!rowSet.absolute(row + 1)) { 230 return; 231 } 232 rowSet.updateObject(column + 1, value); 233 } catch (SQLException e) { 234 } 235 } 236 237 public static void main(String[] args) { 238 DataSource ds = new DataSource(); 239 ds.setName("Test"); 240 ds.setDriver("oracle.jdbc.driver.OracleDriver"); 241 ds.setUrl("jdbc:oracle:thin:@hades.genscape.com:1581:test"); 242 ds.setUser("genscape"); 243 ds.setPassword("gentest"); 244 JDBCConnectionManager manager = new JDBCConnectionManager(ds); 245 Connection con = null; 246 Statement stmt = null; 247 ResultSet rs = null; 248 CachedRowSet crs = null; 249 try { 250 con = manager.getConnection(); 251 stmt = con.createStatement(); 252 rs = stmt.executeQuery("select * from plant"); 253 stmt.setMaxRows(25); 254 crs = new CachedRowSet(); 255 crs.populate(rs); 256 } catch (DataSourceException e) { 257 e.printStackTrace(); 258 } catch (SQLException e) { 259 e.printStackTrace(); 260 } finally { 261 try { 262 rs.close(); 263 stmt.close(); 264 con.close(); 265 } catch (SQLException e) { 266 e.printStackTrace(); 267 } 268 } 269 JFrame frame = new JFrame("Test"); 270 CachedRowSetTableModel model = new CachedRowSetTableModel(crs); 271 JTable table = new JTable(model); 272 JScrollPane jScrollPane = new JScrollPane(table); 273 frame.getContentPane().add(jScrollPane); 274 frame.pack(); 275 frame.show(); 276 } 277 278 }

This page was automatically generated by Maven